﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QuanLyHocPhi.BLL;
using QuanLyHocPhi.Model;

namespace QuanLyHocPhi.GUI.DuLieu
{
    public partial class FormHocKy_Details : QuanLyHocPhi.GUI.FormBaseDialog
    {
        private bool m_IsAdding;
        private bool IsAdding
        {
            get { return m_IsAdding; }
            set
            {
                m_IsAdding = value;
                if (m_IsAdding)
                {
                    this.Text = "Tạo mới học kỳ";
                }
                else
                {
                    this.Text = "Chỉnh sửa học kỳ";
                }
            }
        }

        private HocKy m_HocKy;

        public FormHocKy_Details(HocKy hocKy, bool isAdding)
        {
            InitializeComponent();

            m_HocKy = hocKy;
            this.IsAdding = isAdding;
            DisplayData();
        }

        private void DisplayData()
        {
            txtNamHoc.Text = m_HocKy.NamHoc;
            nudHocKy.Value = m_HocKy.SoHieuHocKy;
            txtHocPhiChuyen.Text = CommonUtils.StringOf(m_HocKy.HocPhiChuyen);
            txtPhuThuChuyen.Text = CommonUtils.StringOf(m_HocKy.PhuThuChuyen);
            txtHocPhiKhongChuyen.Text = CommonUtils.StringOf(m_HocKy.HocPhiKhongChuyen);
            txtPhuThuKhongChuyen.Text = CommonUtils.StringOf(m_HocKy.PhuThuKhongChuyen);
        }

        private decimal GetDecimalValue(TextBox txt, string errorMessage)
        {
            decimal result = 0;
            try
            {
                result = Convert.ToDecimal(txt.Text.Trim());
            }
            catch
            {
                DialogUtils.ShowError(errorMessage);
                txt.Focus();
                result = -1;
            }
            return result;
        }

        private void OnOKClick(object sender, EventArgs e)
        {
            #region Thu thập thông tin
            string namHoc = txtNamHoc.Text.Trim();
            if (namHoc.IsNullOrEmpty())
            {
                DialogUtils.ShowError("Không được để trống thông tin năm học!");
                txtNamHoc.Focus();
                return;
            }

            int soHieuHocKy = 0;
            try
            {
                soHieuHocKy = Convert.ToInt32(nudHocKy.Value);
            }
            catch
            {
                soHieuHocKy = 0;
            }
            if (0 > soHieuHocKy || soHieuHocKy > 3)
            {
                DialogUtils.ShowError("Thông tin học kỳ không hợp lệ. Học kỳ là số 1, 2, 3!");
                nudHocKy.Focus();
                return;
            }

            decimal hocPhiChuyen = GetDecimalValue(txtHocPhiChuyen, "Thông tin học phí không hợp lệ!");
            if (hocPhiChuyen < 0)
                return;
            decimal phuThuChuyen = GetDecimalValue(txtPhuThuChuyen, "Thông tin phụ thu không hợp lệ!");
            if (phuThuChuyen < 0)
                return;
            decimal hocPhiKhongChuyen = GetDecimalValue(txtHocPhiKhongChuyen, "Thông tin học phí không chuyên không hợp lệ!");
            if (hocPhiKhongChuyen < 0)
                return;
            decimal phuThuKhongChuyen = GetDecimalValue(txtPhuThuKhongChuyen, "Thông tin phụ thu không chuyên không hợp lệ!");
            if (phuThuKhongChuyen < 0)
                return;
            #endregion

            #region Cập nhật
            HocKy hocKy = new HocKy
            {
                MaHocKy = m_HocKy.MaHocKy,
                NamHoc = namHoc,
                SoHieuHocKy = soHieuHocKy,
                HocPhiChuyen = hocPhiChuyen,
                PhuThuChuyen = phuThuChuyen,
                HocPhiKhongChuyen = hocPhiKhongChuyen,
                PhuThuKhongChuyen = phuThuKhongChuyen
            };

            try
            {
                if (this.IsAdding)
                    BizHocKy.AddNew_HocKy(hocKy);
                else
                    BizHocKy.Update_HocKy(hocKy);
                m_HocKy.NamHoc = namHoc;
                m_HocKy.SoHieuHocKy = soHieuHocKy;
                m_HocKy.HocPhiChuyen = hocPhiChuyen;
                m_HocKy.PhuThuChuyen = phuThuChuyen;
                m_HocKy.HocPhiKhongChuyen = hocPhiKhongChuyen;
                m_HocKy.PhuThuKhongChuyen = phuThuKhongChuyen;
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
            catch (Exception exc)
            {
                DialogUtils.ShowError(exc.Message);
            }

            #endregion
        }

        private void OnNamHocTextChanged(object sender, EventArgs e)
        {
            if (txtNamHoc.Text.Length == 4)
            {
                int nam1 = Convert.ToInt32(txtNamHoc.Text);
                txtNamHoc.TextChanged -= OnNamHocTextChanged;
                txtNamHoc.Text = string.Format("{0}-{1}", nam1, nam1 + 1);
                txtNamHoc.SelectAll();
                txtNamHoc.TextChanged += OnNamHocTextChanged;
            }
        }

        private void OnChonHocKyClick(object sender, EventArgs e)
        {
            var dlg = new SelectHocKyDialog(false, m_HocKy.MaHocKy);
            dlg.Owner = this;
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                HocKy selectedHocKy = dlg.SelectedHocKy;
                if (selectedHocKy.MaHocKy != m_HocKy.MaHocKy)
                {
                    txtHocPhiChuyen.Text = CommonUtils.StringOf(selectedHocKy.HocPhiChuyen);
                    txtPhuThuChuyen.Text = CommonUtils.StringOf(selectedHocKy.PhuThuChuyen);
                    txtHocPhiKhongChuyen.Text = CommonUtils.StringOf(selectedHocKy.HocPhiKhongChuyen);
                    txtPhuThuKhongChuyen.Text = CommonUtils.StringOf(selectedHocKy.PhuThuKhongChuyen);
                }
                else
                {
                    DialogUtils.ShowMessage("Bạn phải chọn học kỳ khác với học kỳ hiện tại");
                }
            }
        }
    }
}
